맨위로가기

구분 문자

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

구분 문자는 필드, 레코드, 영역을 나누는 데 사용되는 문자를 의미한다. 크게 필드/레코드 구분 문자와 영역 구분 문자로 나눌 수 있으며, CSV 파일의 쉼표나 개행 문자, 괄호, 중괄호, 대괄호 등이 예시이다. 프로그래밍 언어와 운영체제에 따라 문자열, 명령문의 끝, 필드, 레코드, 파일의 끝을 나타내는 구분 문자가 다르다. 구분 문자 충돌은 구분자를 의도하지 않게 텍스트에 포함할 때 발생하며, 이스케이프 문자, 이스케이프 시퀀스, 이중 구분 기호, 패딩 구분 기호, 설정 가능한 대체 구분 기호, 콘텐츠 경계, 공백, 정규 표현식 구문, 히어 도큐먼트, ASCII 아머, 배열 변환 등의 다양한 해결책이 존재한다.

더 읽어볼만한 페이지

  • 문자열 - 빈 문자열
    빈 문자열은 형식 언어 이론에서 길이가 0인 문자열을 의미하며 프로그래밍 언어에서 유효한 문자열로 취급되고, 0을 표현하거나 빈 줄을 나타내는 데 사용된다.
  • 문자열 - 문자열 연결
    문자열 연결은 프로그래밍 언어에서 문자열을 결합하는 연산으로, `+` 연산자나 별도의 연산자를 사용하며, 런타임 또는 컴파일 시점에 수행될 수 있고, 형식 언어 이론으로 확장되어 음성 합성 등 다양한 분야에서 활용된다.
  • 패턴 매칭 - 퇴각검색
    퇴각검색은 해를 찾기 위해 트리 구조로 표현된 후보들을 깊이 우선 탐색 방식으로 탐색하며, 유효하지 않은 후보는 가지치기하여 탐색 시간을 단축하는 알고리즘이다.
  • 패턴 매칭 - 정규 표현식
    정규 표현식은 특정 패턴 문자열 집합을 표현하는 식으로, 스티븐 클레이니가 고안하고 켄 톰슨이 텍스트 편집기에 도입한 후 펄을 거쳐 현재 다양한 프로그래밍 언어와 환경에서 텍스트 처리 및 데이터 검증에 널리 쓰인다.
  • 프로그래밍 구성체 - 형 변환
    형 변환은 프로그래밍에서 변수의 데이터 타입을 변경하는 것으로, 암시적 형 변환과 명시적 형 변환으로 나뉘며, 객체 지향 프로그래밍에서는 업캐스팅과 다운캐스팅이 발생하고, 각 언어는 고유한 규칙과 방법을 제공하며 잘못된 형 변환은 오류를 유발할 수 있다.
  • 프로그래밍 구성체 - 연산자 오버로딩
    연산자 오버로딩은 프로그래밍 언어에서 기존 연산자를 사용자 정의 자료형에 대해 재정의하여 내장 자료형처럼 다루도록 하는 기능으로, 코드 가독성과 표현력을 높이지만 남용 시 코드 의미를 모호하게 만들 수 있다.
구분 문자
정의
구분자데이터 스트림에서 영역 간의 경계를 지정하는 문자
용도
컴퓨터 과학데이터 스트림에서 영역 간의 경계를 지정하는 데 사용됨
프로그래밍텍스트 문자열 또는 데이터 스트림에서 데이터 조각을 분리하는 데 사용됨
데이터 전송데이터 패킷의 시작과 끝을 표시하는 데 사용됨
예시
쉼표 (,)CSV 파일에서 필드 구분
탭 (\t)텍스트 기반 데이터에서 필드 구분
세미콜론 (;)일부 프로그래밍 언어에서 문장 구분
공백명령줄 인터페이스에서 명령어와 인자 구분
콜론 (:)파일 경로에서 디렉토리와 파일 이름 구분
슬래시 (/) 또는 백슬래시 (\)URL 또는 파일 경로에서 디렉토리 구분
따옴표 (", ')텍스트 문자열에서 문자열 리터럴 정의
괄호 ((), {}, [])수학적 표현식 또는 프로그래밍 언어에서 코드 블록 그룹화
시작 태그와 종료 태그XML 및 HTML과 같은 마크업 언어에서 요소 정의

2. 구분 문자의 종류

구분 문자는 크게 필드/레코드 구분 문자와 영역 구분 문자로 나눌 수 있다.

필드 구분 문자는 데이터 필드를 구분하고, 레코드 구분 문자는 필드 그룹을 구분한다.[31] 예를 들어, CSV 파일은 쉼표를 필드 구분 문자로, 개행 문자를 레코드 구분 문자로 사용한다.

영역 구분 문자(혹은 블록 구분 문자, 괄호 구분 문자)는 텍스트 영역의 시작과 끝을 모두 표시한다.[61][62][32][33] 괄호, 중괄호, 따옴표 등이 여기에 해당한다.

2. 1. 필드와 레코드 구분 문자

필드 구분 문자는 데이터 필드를 분리하고, 레코드 구분 문자는 필드들의 그룹인 레코드를 분리한다.[60][4][31]

예를 들어, CSV(쉼표로 구분된 값) 파일 형식은 필드 간의 구분 문자로서 쉼표(,)를 사용하고, 레코드 사이의 구분자로는 줄바꿈 문자를 사용한다. 다음은 CSV 파일 형식을 사용하여 간단한 플랫 파일 데이터베이스 테이블을 표현한 예시이다.



성,이름,나이,연봉

김,영희,33,3000만

홍,길동,28,2525만

이,철수,35,2870만



아래는 다른 CSV 파일 예시이다.



fname,lname,age,salary

nancy,davolio,33,3만달러

erin,borakova,28,2.525만달러

tony,raphael,35,2.87만달러



이 예시 역시 CSV 파일 형식을 사용하는 간단한 플랫 파일 데이터베이스 테이블이다.

2. 2. 영역 구분 문자

영역 구분 문자(블록 구분 문자, 괄호 구분 문자라고도 한다)는 텍스트 영역의 시작과 끝을 모두 표시한다.[5][6][32][33][61][62]

영역 구분 문자의 일반적인 예는 다음과 같다.[7][34][63]

구분 문자설명
( )괄호. Lisp 프로그래밍 언어 구문은 주로 괄호 사용으로 인식할 수 있다.[8][35][64]
{ }중괄호[9][36][65]
[ ]대괄호 (일반적으로 첨자를 나타내기 위해 사용된다.)
< >꺽쇠 괄호.[10][37][66]
" "큰따옴표. 일반적으로 문자열 리터럴을 나타내는 데 사용된다.[11][38][67]
작은따옴표. 일반적으로 문자 리터럴을 나타내는 데 사용된다.[11][38][67]
XML 처리 지시어를 나타내는 데 사용된다.[12][39][68]
/* */일부 프로그래밍 언어에서 주석을 나타내는 데 사용된다.[13][40][69]
<% %>일부 웹 템플릿에서 언어 경계를 지정하는 데 사용된다. 이들은 또한 템플릿 구분 문자라고도 불린다.[14][41][70]


2. 2. 1. 규약

필드 구분 문자는 데이터 필드를 분리하고, 레코드 구분 문자는 필드 그룹을 분리한다.[60][31]

예를 들어, CSV 파일 형식은 필드 간의 구분 문자로서 쉼표(,)를 사용하고 레코드 사이의 구분자로는 개행 문자를 사용한다. 다음은 CSV 파일 형식을 사용하여 간단한 플랫 파일 데이터베이스 테이블을 표현한 예이다.[60]



fname,lname,age,salary

nancy,davolio,33,$30000

erin,borakova,28,$25250

tony,raphael,35,$28700



컴퓨팅 플랫폼은 역사적으로 관례에 따라 특정한 구분 문자를 사용해왔다.[71][15][16][42] 다음 표는 비교를 위한 몇 가지 예를 보여준다.

'''프로그래밍 언어'''

(''참고'': 프로그래밍 언어 비교 (구문))

언어문자열 리터럴문장 끝
파스칼작은따옴표 ('')세미콜론 (;)
C작은따옴표 (''), 큰따옴표 ("")세미콜론 (;)
파이썬큰따옴표 (""), 작은따옴표 ('')줄 끝 (EOL)



'''필드 및 레코드 구분 문자'''

(''참고'': ASCII, 제어 문자)

시스템필드 끝레코드 끝파일 끝
유닉스 계열 (macOS, AmigaOS 등)탭 (Tab)LF (Line Feed)없음
윈도우, MS-DOS, OS/2, CP/M탭 (Tab)CRLF (Carriage Return + Line Feed)Control-Z (CP/M 및 호환 시스템)[72][17][43]
클래식 Mac OS, Apple DOS, ProDOS, GS/OS탭 (Tab)CR (Carriage Return)없음
ASCII/유니코드단위 구분 기호 (US)
(U+001F)
레코드 구분 기호 (RS)
(U+001E)
파일 구분 기호 (FS)
(U+001C)


3. 구분 문자 충돌

'''구분 문자 충돌'''(delimiter collision)은 작성자나 프로그래머가 텍스트 내에 특정 문자를 포함시켰을 때, 해당 문자가 원래 의도와 다르게 데이터 영역을 나누는 구분 문자로 해석되어 문제를 일으키는 현상이다.[73][4][18][31][44]

예를 들어, XML 문서에서 내용을 작성할 때 꺽쇠 괄호(<, >) 문자를 그대로 사용하면, XML 구조를 정의하는 태그로 잘못 인식되어 구분 문자 충돌이 발생할 수 있다.

대부분의 파일 형식은 데이터 항목(필드)을 구분하는 문자와 데이터 묶음(레코드)을 구분하는 문자를 모두 가지고 있으며, 두 종류의 구분 문자 모두 충돌을 일으킬 수 있다. 대표적인 예로 CSV(쉼표로 구분된 값) 파일 형식이 있다. 만약 데이터 값 자체에 쉼표(,)가 포함된 경우(예: 급여 필드에 "$30,000" 또는 "38,915엔 87전"과 같이 값을 입력하는 경우), 이 쉼표가 필드를 나누는 구분 문자로 오인되어 필드 구분 문자 충돌이 발생한다. 또한, 하나의 데이터 필드 값이 여러 줄로 이루어져 있을 경우, 줄 바꿈 문자가 레코드를 나누는 구분 문자로 잘못 해석되어 레코드 구분 문자 충돌이 발생할 수도 있다. 이러한 구분 문자 충돌은 텍스트 기반 파일에서 자주 발생하는 문제이다.

경우에 따라 악의적인 사용자나 공격자가 이러한 구분 문자 충돌 문제를 의도적으로 이용하여 시스템을 공격할 수도 있다. 이 때문에 구분 문자 충돌은 보안 취약점이나 익스플로잇(악용)의 원인이 되기도 한다. 예를 들어, 공격자는 SQL 언어의 구분 문자 충돌을 악용하여 SQL 삽입 공격을 시도하거나, HTML의 구분 문자 충돌을 이용하여 사이트 간 스크립팅(XSS) 공격을 수행할 수 있다. 이러한 공격은 시스템의 데이터를 유출하거나 조작하고, 사용자의 정보를 탈취하는 등 심각한 피해를 유발할 수 있으므로 주의가 필요하다.

3. 1. 해결책

구분자 충돌은 매우 일반적인 문제이기 때문에 이를 방지하기 위한 다양한 방법이 개발되었다.

3. 1. 1. 임시방편

구분자 충돌은 매우 흔하게 발생하는 문제이기 때문에, 이를 피하기 위한 다양한 방법들이 고안되었다.

그중 한 가지 방법은 데이터 스트림 자체에는 잘 나타나지 않을 것으로 예상되는 특정 문자나 문자열을 구분 문자로 선택하는 것이다. 이러한 임시방편적인 접근 방식은 일부 상황에서는 적합할 수 있다. 하지만 이 방법은 데이터 스트림에 어떤 내용이 포함될 것인지 정확히 예측해야 한다는 어려움이 있으며, 선택된 문자가 데이터 스트림에 절대로 나타나지 않는다고 보장할 수도 없다. 특히 악의적인 구분자 충돌 공격에 대한 보안을 제공하지 못한다는 명확한 한계점을 가진다. 따라서 이러한 임시방편보다는 더 공식적이고 안전한 규칙들이 일반적으로 사용된다.

3. 1. 2. ASCII 구분 문자

ASCII유니코드 문자 집합에서는 구분자 충돌 문제를 피하기 위해 구분 기호로 사용하기 위한 비인쇄 제어 문자를 제공한다. 이 문자들은 ASCII에서 28번부터 31번까지 할당되어 있다.

ASCII 번호유니코드 이름일반 명칭사용법
28INFORMATION SEPARATOR FOUR파일 구분 기호 (FS: file separator)파일의 끝 또는 별도의 파일일 수 있는 것들의 연결 사이에 위치한다.
29INFORMATION SEPARATOR THREE그룹 구분 기호 (GS: group separator)데이터 섹션 또는 그룹 사이에 위치한다. 단순한 데이터 파일에는 필요하지 않을 수 있다.
30INFORMATION SEPARATOR TWO레코드 구분 기호 (RS: record separator)레코드 또는 행의 끝에 위치한다.
31INFORMATION SEPARATOR ONE단위 구분 기호 (US: unit separator)레코드 내의 필드 사이 또는 행 내의 구성원(멤버) 사이에 위치한다.



ASCII 31번 단위 구분 기호(US)를 필드 구분 기호로 사용하고 ASCII 30번 레코드 구분 기호(RS)를 레코드 구분 기호로 사용하면, 텍스트 데이터 스트림 내에서 발생할 수 있는 필드 및 레코드 구분 기호 관련 문제를 해결할 수 있다.[19][45]

3. 1. 3. 이스케이프 문자

구분자 충돌을 피하는 한 가지 방법은 이스케이프 문자를 사용하는 것이다. 이는 구분 문자로 사용될 수 있는 문자 앞에 특정 이스케이프 문자를 붙여, 해당 문자가 구분 문자가 아님을 명시하는 방식이다. 언어 설계 관점에서 이 방법은 적절하지만 다음과 같은 단점이 있다.

  • 텍스트에 수많은 이스케이프 문자가 포함되어 가독성이 떨어질 수 있다. 이는 기울어진 이쑤시개 증후군이라고도 불리는데, 예를 들어 Perl 정규 표현식에서 슬래시(`/`) 문자를 표현하기 위해 백슬래시(`\`)를 사용하여 `'\/\/'` 와 같이 표기하는 경우가 해당한다.[20]
  • 이스케이프 문자로 사용되는 문자 자체를 일반 문자로 표현하기 위한 별도의 표기법이 필요하다. 예를 들어, HTML에서는 이스케이프 문자 `'&'`를 문자 그대로 표현하기 위해 `'&'` 라는 표기법을 사용하고, C언어에서는 이스케이프 문자 `'\``를 문자 그대로 표현하기 위해 `'\\'` 라는 표기법을 사용한다.
  • 텍스트를 정규 표현식으로 구문 분석하기 어려워진다.
  • 입력 자체는 쉬울 수 있으나, 해당 언어 규칙에 익숙하지 않은 사람에게는 이해하기 어려울 수 있다.[20]
  • 주입 공격을 방어하지 못할 수 있다.

3. 1. 4. 이스케이프 시퀀스

이스케이프 시퀀스는 이스케이프 문자와 유사하지만, 일반적으로 단일 문자 대신 일종의 니모닉(mnemonic, 기억 부호)으로 구성된다는 차이가 있다. 이러한 시퀀스는 예를 들어 큰따옴표(") 문자를 포함하는 문자열 리터럴을 표현할 때 사용될 수 있다.

Perl 언어를 예로 들면, 문자열 안에 큰따옴표를 포함시키기 위해 이스케이프 시퀀스 `\x22`를 사용할 수 있다.

`print "Nancy said \x22Hello World!\x22 to the crowd.";` ### 큰따옴표 대신 이스케이프 시퀀스 \x22를 사용

이는 이스케이프 문자를 사용하는 다음 코드와 동일한 결과를 출력한다.

`print "Nancy said \"Hello World!\" to the crowd.";` ### 이스케이프 문자 사용

이스케이프 시퀀스의 한 가지 단점은 사용자가 개별 문자를 나타내는 코드를 직접 기억해야 한다는 점이다 (문자 참조 참고).

3. 1. 5. 이중 구분 기호

구분 문자 충돌을 피하는 방법 중 하나로 이중 구분 기호가 있다. 이는 이스케이프 시퀀스이스케이프 문자를 사용하는 것과는 다른 방식이다. 일부 프로그래밍 언어에서는 문자열 리터럴을 나타낼 때 작은따옴표(')나 큰따옴표(") 중 하나를 선택하여 사용할 수 있게 한다.

예를 들어, 펄에서는 다음과 같이 사용할 수 있다.



print 'Nancy said "Hello World!" to the crowd.';



이 방식을 사용하면 이스케이프 문자 없이도 큰따옴표가 포함된 문자열을 작은따옴표로 감싸서 표현할 수 있으며, 반대의 경우도 가능하다. 이를 통해 가독성을 높일 수 있다. 하지만 이 방법은 문자열 안에 작은따옴표와 큰따옴표가 모두 포함된 경우에는 사용할 수 없다는 한계가 있다.

3. 1. 6. 패딩 구분 기호

구분 문자 충돌을 피하기 위한 방법 중 하나로, 이스케이프 문자이스케이프 시퀀스와는 다른 '패딩 구분 기호' 방식이 있다. 이는 충돌하는 문자를 구분 기호 자체로 반복하여 사용하는 방법이다. 예를 들어, 구분 문자로 큰따옴표(`"`)를 사용하는 Visual Basic에서는 문자열 리터럴 내부에 큰따옴표를 포함시키고 싶을 때, 해당 큰따옴표를 두 번 연속으로 작성한다. 이는 해당 문자가 구분 기호의 끝을 의미하는 것이 아님을 나타낸다.



print "Nancy said ""Hello World!"" to the crowd."



위 코드는 문자열 안에 큰따옴표를 포함하면서도 별도의 이스케이프 문자 없이 원하는 출력을 생성한다. 하지만 여러 개의 따옴표가 연속해서 나타나는 경우에는 코드를 읽고 이해하기 어려워질 수 있다는 단점이 있다. 예를 들어, 위의 Visual Basic 코드 자체를 문자열로 출력하고 싶을 경우에는 다음과 같이 작성해야 한다.



print "print ""Nancy said """"Hello World!"""" to the crowd."""


3. 1. 7. 설정 가능한 대체 구분 기호

구분자 충돌 문제를 피하는 한 가지 방법은 데이터 스트림 자체에 나타날 가능성이 없는 문자나 문자열을 구분 기호로 선택하는 것이다. 하지만 이 방법은 데이터 내용을 정확히 예측해야 하고, 의도적인 충돌 시도에 취약할 수 있다. 따라서 더 공식적이고 유연한 규칙들이 사용되기도 한다.

다중 구분자 설정은 구분자 충돌을 피하는 데 있어 더 큰 유연성을 제공한다.[7] 예를 들어, Perl에서는 다음과 같이 '따옴표 연산자' (`qq`)를 사용하여 다양한 문자를 구분자로 지정할 수 있다.



print qq^Nancy doesn't want to say "Hello World!" anymore.^;

print qq@Nancy doesn't want to say "Hello World!" anymore.@;

print qq(Nancy doesn't want to say "Hello World!" anymore.);



위의 예시들은 모두 `"Nancy doesn't want to say "Hello World!" anymore."`라는 동일한 결과를 출력하지만, 각각 `^`, `@`, `()`를 구분자로 사용한다. 이처럼 [http://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators 따옴표 연산자]를 통해 편리하게 원하는 문자를 구분자로 선택할 수 있다.

이 방법은 유연성이 높지만 모든 언어에서 지원되지는 않는다. Perl과 루비가 이러한 기능을 지원하는 대표적인 언어이다.[7][21]

3. 1. 8. 콘텐츠 경계 (Content Boundary)

구분자 충돌 문제를 피하기 위해 여러 방법이 개발되었다. 데이터 스트림 자체에 나타날 가능성이 낮은 문자나 문자 시퀀스를 구분 기호로 선택하는 임시적인 접근 방식도 있지만, 이는 데이터 스트림의 내용을 정확히 예측해야 하고 악의적인 충돌에 취약할 수 있다.

이러한 문제를 해결하기 위해 콘텐츠 경계(content boundary)라는 특수한 유형의 구분자가 사용된다. 콘텐츠 경계는 구분자 충돌에 강하도록 설계되었으며, 작성자가 다중 부분 메시지(multipart message)에서 각 부분의 경계를 명확히 나타내는 문자 시퀀스를 지정하여 다른 해석의 여지를 없앤다.[22][50]

콘텐츠 경계로 사용될 구분 문자는 일반적으로 메시지 본문에 나타날 확률이 통계적으로 낮은 임의의 문자열로 생성된다. 여기에 UUID, 타임스탬프와 같은 고유 식별 표시를 덧붙이기도 한다. 또는, 생성된 구분 문자가 실제로 본문에 포함되어 있지 않은지 확인하는 과정을 거칠 수도 있다. 이러한 방식을 통해 구분 문자를 더 짧고 간단하게 만들어 문서의 가독성을 높일 수 있다. 대표적인 예로 MIME의 멀티파트 메시지나 히어 도큐먼트(Here document)에서 사용되는 방식이 있다.

3. 1. 9. 공백 또는 들여쓰기

일부 프로그래밍 언어나 컴퓨터 언어에서는 독립된 텍스트 영역을 나누는 방법으로 공백 구분 기호나 들여쓰기를 사용할 수 있다.[23]

3. 1. 10. 정규 표현식 구문

정규 표현식을 지정할 때, Perl과 같은 일부 언어에서는 '''일치'''(match) 및 '''대체'''(substitute) 연산의 구문을 단순화하고 구분자 충돌[24][52]을 피하기 위해 기본 구분 기호(`/`) 대신 다른 문자를 구분 기호로 사용할 수 있다. 구분자 충돌은 슬래시(`/`) 문자가 포함된 URL이나 파일 경로 등을 정규 표현식으로 처리할 때 자주 발생한다.

예를 들어, Perl에서 기본적인 일치 연산은 다음과 같이 슬래시(`/`)를 구분 기호로 사용한다.



$string1 = 'Nancy said "Hello World!" to the crowd.'; # 대상 문자열 지정

print $string1 =~ m/[aeiou]+/; # 하나 이상의 모음과 일치하는지 확인



만약 찾으려는 패턴 자체에 슬래시(`/`)가 포함되어 있다면, 슬래시 대신 다른 문자를 구분 기호로 사용할 수 있다. 예를 들어 `http://` 문자열을 찾으려면 다음과 같이 `@`, `{}` 또는 `!` 등을 구분 기호로 사용할 수 있다. 이를 통해 표현식 내의 슬래시를 이스케이프 처리(`\/`)해야 하는 번거로움을 피할 수 있다.



$string1 = 'Nancy said "http://Hello/World.htm" is not a valid address.'; # 대상 문자열 지정

print $string1 =~ m@http://@; # '@'를 대체 구분 기호로 사용하여 일치 여부 확인

print $string1 =~ m{http://}; # '{}'를 대체 구분 기호로 사용 (위와 동일한 결과)

print $string1 =~ m!http://!; # '!'를 대체 구분 기호로 사용 (위와 동일한 결과)


3. 1. 11. 히어 도큐먼트 (Here Document)

히어 도큐먼트(Here Document)는 특별한 종료 시퀀스를 지정하여 임의의 콘텐츠를 포함할 수 있게 하는 기능이다. 이는 구분 문자의 충돌 문제를 피하기 위한 방법 중 하나이다. PHP, Bash, 루비, Perl 등 많은 언어에서 지원한다. 히어 도큐먼트는 특정 종료 시퀀스를 먼저 지정하고, 그 시퀀스가 새 줄의 시작 부분에 나타날 때까지의 모든 내용을 문자열로 처리한다.[25][53]

다음은 Perl에서의 히어 도큐먼트 사용 예시이다.



print <
It's very hard to encode a string with "certain characters".

Newlines, commas, and other characters can cause delimiter collisions.

ENDOFHEREDOC



위 코드는 아래와 같이 출력된다.



It's very hard to encode a string with "certain characters".

Newlines, commas, and other characters can cause delimiter collisions.



이처럼 특수한 종료 시퀀스를 사용하면, 종료 시퀀스 자체를 제외하고는 문자열 내에 어떤 종류의 문자(줄 바꿈, 따옴표 등)라도 자유롭게 포함할 수 있다.

3. 1. 12. ASCII 아머 (ASCII Armor)

ASCII 아머링은 주로 바이너리 데이터를 텍스트 형식으로 인코딩하는 데 사용되는 프로그래밍 및 시스템 관리 기술이다.[26][27][54][55] 또한 특정 상황에서는 구분 문자 충돌을 피하기 위해 사용되기도 한다.

이 기술은 base64와 같은 특수한 인코딩 방식을 사용하여, 전송되는 데이터 안에 구분자로 사용될 수 있는 문자나 기타 중요한 의미를 가진 문자가 포함되지 않도록 한다. 이를 통해 여러 단계에 걸쳐 이스케이프 문자를 사용해야 하는 복잡성(예: 따옴표 이스케이프를 다시 이스케이프 처리하는 경우)을 피할 수 있다.

그러나 ASCII 아머링은 구현이 복잡하기 때문에, 규모가 작은 애플리케이션이나 단순한 데이터 저장 형식에는 적합하지 않다. 대표적인 사용 예시로는 마이크로소프트ASP.NET 웹 개발 기술이 있으며, 해당 시스템의 "VIEWSTATE" 구성 요소 처리와 밀접하게 연관되어 있다.[28][56]

3. 1. 13. 배열 변환

구분자 충돌은 매우 흔하게 발생하는 문제이기 때문에, 이를 피하기 위한 다양한 방법이 개발되었다.[57] 때로는 데이터 스트림 자체에 나타날 가능성이 없는 문자나 문자열을 구분 기호로 선택하여 문제를 피하려고 시도하기도 한다. 하지만 이 방법은 데이터 내용을 정확히 예측해야만 하고, 악의적인 충돌로부터 안전하지 않다는 한계가 있다.[57]

이러한 문제를 해결하기 위해 보다 공식적인 규칙이 적용되기도 하는데, 그중 하나가 배열 변환 방식이다. 이 방식은 구분자로 사용하려는 여러 문자열 안에 포함되지 않은 특정 문자를 찾아 구분 문자로 지정한다. 그리고 어떤 문자가 구분 문자로 사용되었는지를 정해진 위치(예: 전체 문자열의 시작이나 끝)에 명시적으로 표시하는 방법을 사용한다.[57]

예를 들어, `"\10,000"`, `"\300"`, `"aaa;"`라는 세 개의 문자열 데이터가 있다고 가정해 보자. 이 문자열들에는 이미 쉼표(,)와 세미콜론(;)이 포함되어 있어 이들을 구분자로 사용할 경우 데이터가 손상될 수 있다. 따라서 이 문자열들에 존재하지 않는 새로운 문자, 예를 들어 `>`를 구분 문자로 선택한다. 그리고 이 구분자 정보를 포함하여 문자열을 다음과 같이 변환할 수 있다.[57]

`">\\10,000>\\300>aaa;>"`

위 예시에서는 각 데이터(`\10,000`, `\300`, `aaa;`)를 `>` 문자로 구분하였으며, 전체 문자열의 마지막에 구분자로 사용된 `>` 문자를 다시 한번 표시하여 어떤 문자가 구분자인지를 명확히 알 수 있도록 했다.[57]

참조

[1] 웹사이트 Definition: delimiter https://www.its.bldr[...] 2019-11-25
[2] 웹사이트 What is a Delimiter? https://www.computer[...] 2020-08-09
[3] 서적 Programming in Fortran Oxford University Press
[4] 서적 Progress in Standardization in Health Care Informatics IOS Press
[5] 서적 Mastering Regular Expressions: Powerful Techniques for Perl and Other Tools O'Reilly
[6] 서적 Programming Language Pragmatics Morgan Kaufmann
[7] 서적 Programming Perl O'Reilly 2000-07
[8] 서적 Computer-Aided Reasoning: An Approach Springer
[9] 서적 Explorations in Computer Science Oxford University Press
[10] 서적 Computing in the Web Age Oxford University Press
[11] 서적 Learning Perl https://archive.org/[...] Oxford University Press
[12] 서적 Sams Teach Yourself Xml in 10 Minutes https://archive.org/[...] Oxford University Press
[13] 서적 C# for Java Programmers Oxford University Press
[14] 웹사이트 Jakarta Server Pages Specification, Version 4.0akarta Server Pages Specification, Version 4.0 https://github.com/j[...] 2023-02-10
[15] 간행물 The set of control characters for ISO 646 1975-12-01
[16] 간행물 ASCII graphic character set 1975-12-01
[17] 서적 Posix Programmer's Guide https://archive.org/[...] Oxford University Press
[18] 서적 Mastering Regular Expressions Oxford University Press
[19] 문서 Discussion on ASCII Delimited Text vs CSV and Tab Delimited http://ronaldduncan.[...]
[20] 서적 Automating InDesign with Regular Expressions O'Reilly
[21] 서적 Ruby in a Nutshell https://archive.org/[...] O'Reilly
[22] 서적 Network Protocols Handbook Javvin Technologies Inc.
[23] 서적 Computational Linguistics and Intelligent Text Processing Oxford University Press
[24] 서적 Mastering Regular Expressions Oxford University Press
[25] 문서 Perl operators and precedence http://perldoc.perl.[...]
[26] 서적 Internet Security: Cryptographic Principles, Algorithms and Protocols John Wiley and Sons
[27] 서적 Open Source for Windows Administrators https://archive.org/[...] Charles River Media
[28] 서적 Developing and Implementing Web Applications with Visual C# . NET and Visual Studio . NET Que
[29] 문서 Federal Standard 1037C - Telecommunications: Glossary of Telecommunication Terms http://www.its.bldrd[...]
[30] 서적 Programming in Fortran Oxford University Press
[31] 서적 Progress in Standardization in Health Care Informatics IOS Press
[32] 서적 Mastering Regular Expressions: Powerful Techniques for Perl and Other Tools O'Reilly
[33] 서적 Programming Language Pragmatics Morgan Kaufmann
[34] 서적 Programming Perl O'Reilly 2000-07
[35] 서적 Computer-Aided Reasoning: An Approach Springer
[36] 서적 Explorations in Computer Science Oxford University Press
[37] 서적 Computing in the Web Age Oxford University Press
[38] 서적 Learning Perl Oxford University Press
[39] 서적 Sams Teach Yourself Xml in 10 Minutes Oxford University Press
[40] 서적 C# for Java Programmers Oxford University Press
[41] 웹사이트 Smarty Template Documentation http://www.smarty.ne[...] 2010-03-12
[42] 간행물 The set of control characters for ISO 646 Internet Assigned Numbers Authority Registry 1975-12-01
[43] 서적 Posix Programmer's Guide Oxford University Press
[44] 서적 Mastering Regular Expressions Oxford University Press
[45] 문서 Discussion on ASCII Delimited Text vs CSV and Tab Delimited http://ronaldduncan.[...]
[46] 서적 Automating InDesign with Regular Expressions O'Reilly
[47] 서적 Programming Perl O'Reilly 2000-07
[48] 서적 Programming Perl O'Reilly 2000-07
[49] 서적 Ruby in a Nutshell O'Reilly
[50] 서적 Network Protocols Handbook Javvin Technologies Inc.
[51] 서적 Computational Linguistics and Intelligent Text Processing Oxford University Press
[52] 서적 Mastering Regular Expressions Oxford University Press
[53] 문서 Perl operators and precedence http://perldoc.perl.[...]
[54] 서적 Internet Security: Cryptographic Principles, Algorithms and Protocols John Wiley and Sons
[55] 서적 Open Source for Windows Administrators Charles River Media
[56] 서적 Developing and Implementing Web Applications with Visual C# . NET and Visual Studio . NET Que
[57] 문서 日本国特許第6511598号
[58] 웹인용 Federal Standard 1037C ''delimiter'' http://www.its.bldrd[...] 2014-01-28
[59] 서적 Programming in Fortran https://archive.org/[...] Oxford University Press
[60] 서적 Progress in Standardization in Health Care Informatics IOS Press
[61] 서적 Mastering Regular Expressions: Powerful Techniques for Perl and Other Tools https://archive.org/[...] O'Reilly
[62] 서적 Programming Language Pragmatics Morgan Kaufmann
[63] 서적 Programming Perl, Third Edition O'Reilly
[64] 서적 Computer-Aided Reasoning: An Approach https://archive.org/[...] Springer
[65] 서적 Explorations in Computer Science Oxford University Press
[66] 서적 Computing in the Web Age Oxford University Press
[67] 서적 Learning Perl https://archive.org/[...] Oxford University Press
[68] 서적 Sams Teach Yourself Xml in 10 Minutes Oxford University Press
[69] 서적 C# for Java Programmers Oxford University Press
[70] 웹사이트 Smarty Template Documentation http://www.smarty.ne[...] 2010-03-12
[71] 간행물 The set of control characters for ISO 646 http://www.itscj.ips[...] International Organization for Standardization 1975-12-01
[72] 서적 Posix Programmer's Guide Oxford University Press
[73] 서적 Mastering Regular Expressions Oxford University Press



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com